package com.example.demo.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WordDealUtil {
	/**
	 * 将Java对象名称（每个单词的头字母大写）按照
	 * 数据库命名的习惯进行格式化
	 * 格式化后的数据为小写字母，并且使用下划线分割命名单词
	 * 
	 * 例如：employeeInfo 经过格式化之后变为 employee_info
	 * 
	 * @param name Java对象名称
	 */
	public static String wordFormat4DB(String name){
		if (name == null || name.isEmpty()) {
			return name;
		}
		
		StringBuilder result = new StringBuilder();
		boolean lastIsUpper = false;
		
		for (int i = 0; i < name.length(); i++) {
			char c = name.charAt(i);
			if (Character.isUpperCase(c)) {
				// 如果不是首字母，且前一个字符不是大写，则添加下划线
				if (i > 0 && !lastIsUpper) {
					result.append('_');
				}
				result.append(Character.toLowerCase(c));
			} else {
				// 如果前一个是大写字母，且不是第一个字母，且前面还有字母，则在前面添加下划线
				if (i > 1 && lastIsUpper && Character.isUpperCase(name.charAt(i-2))) {
					result.insert(result.length() - 1, '_');
				}
				result.append(c);
			}
			lastIsUpper = Character.isUpperCase(c);
		}
		
		return result.toString();
	}

}
